bitkeeper revision 1.1159.1.113 (4136e90fOr8_LyqJ85kTqL-uFrO_xw)
authormjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Thu, 2 Sep 2004 09:34:07 +0000 (09:34 +0000)
committermjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Thu, 2 Sep 2004 09:34:07 +0000 (09:34 +0000)
Remove debug prints and turn logging to stderr off by default.

tools/python/xen/xend/XendDomain.py
tools/python/xen/xend/XendDomainInfo.py
tools/python/xen/xend/XendLogging.py
tools/python/xen/xend/XendRoot.py
tools/python/xen/xend/server/SrvDaemon.py
tools/python/xen/xend/server/blkif.py
tools/python/xen/xend/server/controller.py
tools/python/xen/xend/server/netif.py

index c4180da8e5f88401a66aba7db405dddefbdac30f..8621bd2e411b44e502ab4d942342fd6b403927c9 100644 (file)
@@ -228,10 +228,6 @@ class XendDomain:
         """
         self.reap_cancel()
         domlist = xc.domain_getinfo()
-        #for d in domlist:
-        #    print 'reap> xen:  ', d['dom'], d
-        #for d in self.domain_by_id.values():
-        #    print 'reap> xend: ', d.id, d.info
         casualties = []
         for d in domlist:
             dead = 0
@@ -272,10 +268,6 @@ class XendDomain:
         """
         self.refresh_cancel()
         domlist = xc.domain_getinfo()
-        #for d in domlist:
-        #    print 'refresh> xen:  ', d['dom'], d
-        #for d in self.domain_by_id.values():
-        #    print 'refresh> xend: ', d.id, d.info
         # Index the domlist by id.
         # Add entries for any domains we don't know about.
         doms = {}
@@ -394,12 +386,8 @@ class XendDomain:
         @param vmconfig: vm configuration
         @return: deferred
         """
-        print 'domain_configure>', id, vmconfig
         config = sxp.child_value(vmconfig, 'config')
         dominfo = self.domain_lookup(id)
-        print 'domain_configure>', 'dominfo=', dominfo
-        for dinfo in self.domain_by_id.values():
-            print 'domain', 'id=', dinfo.id, 'name=', dinfo.name
         log.debug('domain_configure> id=%s config=%s', str(id), str(config))
         if dominfo.config:
             raise XendError("Domain already configured: " + dominfo.id)
@@ -597,11 +585,9 @@ class XendDomain:
         """
         # Need a cancel too?
         # Don't forget to cancel restart for it.
-        print 'domain_migrate>', id, dst
         dominfo = self.domain_lookup(id)
         xmigrate = XendMigrate.instance()
         val = xmigrate.migrate_begin(dominfo.id, dst, live=live)
-        print 'domain_migrate<', val
         return val
 
     def domain_save(self, id, dst, progress=0):
@@ -616,10 +602,10 @@ class XendDomain:
         xmigrate = XendMigrate.instance()
         return xmigrate.save_begin(dominfo.id, dst)
     
-    def domain_pincpu(self, dom, cpu):
+    def domain_pincpu(self, id, cpu):
         """Pin a domain to a cpu.
 
-        @param dom: domain
+        @param id: domain
         @param cpu: cpu number
         """
         dominfo = self.domain_lookup(id)
index 673153dd66d990e77001274f76b27b2c5f1e9f13..88a9d5b5c3146e16b7938b2bebf5e896a84f8c11 100644 (file)
@@ -16,7 +16,6 @@ import os
 import time
 
 from twisted.internet import defer
-#defer.Deferred.debug = 1
 
 import xen.lowlevel.xc; xc = xen.lowlevel.xc.new()
 import xen.util.ip
@@ -188,7 +187,7 @@ def vif_up(iplist):
 
     def arping(ip, gw):
         cmd = '/usr/sbin/arping -A -b -I eth0 -c 1 -s %s %s' % (ip, gw)
-        print cmd
+        log.debug(cmd)
         os.system(cmd)
         
     gateway = xen.util.ip.get_current_ipgw() or '255.255.255.255'
@@ -472,7 +471,6 @@ class XendDomainInfo:
         # my domain id.
         if not dominfo:
             return
-        #print 'check_name>', 'dom=', dominfo.name, dominfo.dom, 'self=', name, self.dom
         if dominfo.is_terminated():
             return
         if not self.dom or (dominfo.dom != self.dom):
index 9be84b834cce42fb023e5c71a84c4b906f58c001..9fc7cbb1c6f2e4b7de849585dcd3b044d2be5da9 100644 (file)
@@ -18,6 +18,9 @@ class XendLogging:
     dateFormat = "%Y-%m-%d %H:%M:%S"
 
     def __init__(self, filename, level=logging.INFO, maxBytes=None, backupCount=None):
+        """Initialise logging. Logs to 'filename' by default, but does not log to
+        stderr unless addLogStderr() is called.
+        """
         self.setLevel(level)
         if maxBytes:
             self.maxBytes = maxBytes
@@ -25,7 +28,6 @@ class XendLogging:
             self.backupCount = backupCount
         self.initLogFile(filename)
         self.initLogStderr()
-        pass
 
     def setLevel(self, level):
         if isinstance(level, types.StringType):
@@ -40,6 +42,8 @@ class XendLogging:
         return logging.getLogger("xend")
 
     def initLogFile(self, filename):
+        """Create the file logger and add it.
+        """
         self.logfile = RotatingFileHandler(filename,
                                            mode='a',
                                            maxBytes=self.maxBytes,
@@ -56,9 +60,18 @@ class XendLogging:
         return self.logfilename
 
     def initLogStderr(self):
+        """Create the stderr logger, but don't add it.
+        """
         self.logstderr = StreamHandler()
         self.logstderr.setFormatter(Formatter(self.logStderrFormat, self.dateFormat))
+
+    def addLogStderr(self):
+        """Add logging to stderr."""
         self.getLogger().addHandler(self.logstderr)
+
+    def removeLogStderr(self):
+        """Remove logging to stderr."""
+        self.getLogger().removeHandler(self.logstderr)
         
     def getLogStderr(self):
         return self.logstderr
index 12e13a2756f7ef76d7ba2d133fbe73fb0c8891fb..d9c6c800125fa19bc8c233ce4b4731eaffe7d2fd 100644 (file)
@@ -58,6 +58,7 @@ class XendRoot:
         self.dbroot = None
         self.config_path = None
         self.config = None
+        self.logger = None
         self.configure()
         self.check_lastboot()
         eserver.subscribe('xend.*', self.event_handler)
@@ -85,18 +86,75 @@ class XendRoot:
     def start(self):
         eserver.inject('xend.start', self.rebooted)
 
+    def _format(self, msg, args):
+        if args:
+            return str(msg)
+        else:
+            return str(msg) % args
+
+    def _log(self, mode, fmt, args):
+        """Logging function that uses the logger if it exists, otherwise
+        logs to stderr. We use this for XendRoot log messages because
+        they may be logged before the logger has been configured.
+        Other components can safely use the logger.
+        """
+        log = self.get_logger()
+        if mode not in ['warning', 'info', 'debug', 'error']:
+            mode = 'info'
+        level = mode.upper()
+        if log:
+            getattr(log, mode)(fmt, *args)
+        else:
+            print >>stderr, "xend", "[%s]" % level, self._format(msg, args)
+
+    def logDebug(self, fmt, *args):
+        """Log a debug message.
+
+        @param fmt: message format
+        @param args: arguments
+        """
+        self._log('info', fmt, args)
+        
+    def logInfo(self, fmt, *args):
+        """Log an info message.
+
+        @param fmt: message format
+        @param args: arguments
+        """
+        self._log('info', fmt, args)
+
+    def logWarning(self, fmt, *args):
+        """Log a warning message.
+
+        @param fmt: message format
+        @param args: arguments
+        """
+        self._log('warning', fmt, args)
+        
+    def logError(self, fmt, *args):
+        """Log an error message.
+
+        @param fmt: message format
+        @param args: arguments
+        """
+        self._log('error', fmt, args)
+        
     def event_handler(self, event, val):
-        print >> sys.stderr, "EVENT>", event, val
+        self.logInfo("EVENT> %s %s", str(event), str(val))
 
     def read_lastboot(self):
+        """Read the lastboot file to determine the time of the last boot.
+        """
         try:
             val = file(self.lastboot, 'rb').readlines()[0]
         except StandardError, ex:
-            print 'warning: Error reading', self.lastboot, ex
+            self.logWarning('Error reading %s: %s', self.lastboot, str(ex))
             val = None
         return val
 
     def write_lastboot(self, val):
+        """Write the last boot time to the lastboot file.
+        """
         if not val: return
         try:
             fdir = os.path.dirname(self.lastboot)
@@ -106,8 +164,7 @@ class XendRoot:
             out.write(val)
             out.close()
         except IOError, ex:
-            print 'warning: Error writing', self.lastboot, ex
-            pass
+            self.logWarning('Error writing %s: %s', self.lastboot, str(ex))
 
     def check_lastboot(self):
         """Check if there has been a system reboot since we saved lastboot.
@@ -122,13 +179,17 @@ class XendRoot:
         self.last_reboot = this_val
 
     def get_last_reboot(self):
+        """Get the last reboot time as a string.
+        """
         return self.last_reboot
 
     def get_rebooted(self):
+        """Get the rebooted flag. The flag is true if the system has
+        been rebooted since xend was last run.
+        """
         return self.rebooted
 
     def configure(self):
-        print 'XendRoot>configure>'
         self.set_config()
         self.configure_logger()
         self.dbroot = self.get_config_value("dbroot", self.dbroot_default)
@@ -140,9 +201,13 @@ class XendRoot:
         self.logging = XendLogging(logfile, level=loglevel)
 
     def get_logging(self):
+        """Get the XendLogging instance.
+        """
         return self.logging
 
     def get_logger(self):
+        """Get the logger.
+        """
         return self.logging.getLogger()
 
     def get_dbroot(self):
@@ -156,9 +221,7 @@ class XendRoot:
         The config file is a sequence of sxp forms.
         """
         self.config_path = os.getenv(self.config_var, self.config_default)
-        print 'XendRoot>set_config> config_path=', self.config_path
         if os.path.exists(self.config_path):
-            print 'XendRoot>set_config> loading'
             fin = file(self.config_path, 'rb')
             try:
                 config = sxp.parse(fin)
@@ -167,9 +230,7 @@ class XendRoot:
             finally:
                 fin.close()
         else:
-            print 'XendRoot>set_config> not found'
             self.config = ['xend-config']
-        print 'XendRoot> config=', self.config
 
     def get_config(self, name=None):
         """Get the configuration element with the given name, or
@@ -213,6 +274,9 @@ class XendRoot:
         return v in ['yes', '1', 'on']
 
 def instance():
+    """Get an instance of XendRoot.
+    Use this instead of the constructor.
+    """
     global inst
     try:
         inst
@@ -221,10 +285,24 @@ def instance():
     return inst
 
 def logger():
+    """Get the logger.
+    """
     return instance().get_logger()
 
 def add_component(name, val):
+    """Register a component with XendRoot.
+    This is used to work-round import cycles.
+
+    @param name: component name
+    @param val:  component value (often a module)
+    """
     return instance().add_component(name, val)
 
 def get_component(name):
+    """Get a component.
+    This is used to work-round import cycles.
+
+    @param name: component name
+    @return component or None
+    """
     return instance().get_component(name)
index 55aa6567aae955edfbd6a4d0e5fbe9aa205400b6..851b72198b53f280a06bc77a625dcea3b4f25ce5 100644 (file)
@@ -334,7 +334,7 @@ class EventProtocol(protocol.Protocol):
         self.events = events
 
     def queue_event(self, name, v):
-        # Despite the name we dont' queue the event here.
+        # Despite the name we don't queue the event here.
         # We send it because the transport will queue it.
         self.send_event([name, v])
         
@@ -397,11 +397,27 @@ class EventProtocol(protocol.Protocol):
         eserver.inject(sxp.name(event), event)
         return ['ok']
 
-    def op_traceon(self, name, v):
-        self.daemon.tracing(1)
+    def op_trace(self, name, v):
+        mode = (v[1] == 'on')
+        self.daemon.tracing(mode)
 
-    def op_traceoff(self, name, v):
-        self.daemon.tracing(0)
+    def op_log_stderr(self, name, v):
+        mode = v[1]
+        logging = XendRoot.instance().get_logging()
+        if mode == 'on':
+            logging.addLogStderr()
+        else:
+            logging.removeLogStderr()
+
+    def op_debug_msg(self, name, v):
+        mode = v[1]
+        import messages
+        messages.DEBUG = (mode == 'on')
+
+    def op_debug_controller(self, name, v):
+        mode = v[1]
+        import controller
+        controller.DEBUG = (mode == 'on')
 
 
 class EventFactory(protocol.Factory):
index d961008bf215a1c938da637202243ae963b98f0a..c3c3eb2de3b90ddc129d62e36987b6052cb6e001 100755 (executable)
@@ -74,7 +74,6 @@ class BlkifBackendInterface(controller.BackendInterface):
 
     def respond_be_create(self, msg):
         val = unpackMsg('blkif_be_create_t', msg)
-        print 'respond_be_create>', val
         self.connected = 1
         return self
     
@@ -122,7 +121,6 @@ class BlkifBackendInterface(controller.BackendInterface):
         @type  msg: xu message
         """
         val = unpackMsg('blkif_be_connect_t', msg)
-        print 'respond_be_connect>', str(self), val
         self.send_fe_interface_status_changed()
             
     def send_fe_interface_status_changed(self, response=None):
@@ -401,7 +399,6 @@ class BlkifController(controller.SplitController):
 
     def recv_fe_driver_status_changed(self, msg, req):
         val = unpackMsg('blkif_fe_driver_status_changed_t', msg)
-        print 'recv_fe_driver_status_changed>', val
         # For each backend?
         msg = packMsg('blkif_fe_interface_status_changed_t',
                       { 'handle' : 0,
index d2628e877988f442006a398a9907af0fb3048314..d77f51c10ced70ab3ab32dbef9deba8f00bbfc3e 100755 (executable)
@@ -9,7 +9,7 @@ from twisted.internet import defer
 import channel
 from messages import msgTypeName, printMsg
 
-DEBUG = 1
+DEBUG = 0
 
 class Responder:
     """Handler for a response to a message with a specified id.
index 8b40db615e702b3d693a9d30fad31dbee5878cbe..3b4dc25339ef2cc68df3ddb02244c3875c1f14a7 100755 (executable)
@@ -191,7 +191,6 @@ class NetDev(controller.SplitDev):
             vnet.vifctl(op, self.get_vifname(), self.get_mac())
 
     def attach(self):
-        print 'attach>'
         d = self.send_be_create()
         d.addCallback(self.respond_be_create)
         return d
@@ -207,7 +206,6 @@ class NetDev(controller.SplitDev):
 
     def respond_be_create(self, msg):
         val = unpackMsg('netif_be_create_t', msg)
-        print 'respond_be_create>', val
         return self
 
     def destroy(self):